package cn.wolfcode.trip.base.service;

import cn.wolfcode.trip.base.domain.Message;
import cn.wolfcode.trip.base.domain.MessageContent;
import cn.wolfcode.trip.base.query.friend.MessageQuery;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 信息的服务类
 * 创建者:xuese
 * 作用:用户间信息交流使用的类
 */
public interface IMessageService {
    /**
     * 发送信息
     * 直接创建一条信息
     * @param message 信息的全部字段
     */
    void sendMassage(Message message);

    /**
     * 获取信息列表
     * @param qo 查询条件
     * @return 返回pageInfo,封装有list
     */
    PageInfo getMessage(MessageQuery qo);

    /**
     * 获取请求信息列表
     * @param id 接收人id
     * @return 返回封装两种请求的pageInfo的map
     */
    Map<String,Object> getInviteList(Long id);

    Map<String,Object> getOneMessage(Long id);

    /**
     * 根据信息id,单条标记已读
     * @param messageId
     */
    void markRead(Long messageId);

    /**
     * 根据发送接收者,批量标记已读
     * 如果是群消息,则标记未读
     * @param userId    发送者
     * @param targetId  接受者
     */
    void batchMarkread(Long userId, Long targetId,Integer type);

    /**
     * 获取信息提示列表,接收的信息类型为 1, 普通会话,包括私信
     * @param targetId 接收信息的id
     * @return 返回map的list集合,map封装发送人的id,nickName,头像,信息条数
     */
    List<Map<String,Object>> getMessageDialogClue(Long targetId);

    /**
     * 获得好友间对话信息,多条
     * 翻页功能太麻烦,暂不考虑
     * @param userId    好友id
     * @param targetId  用户id
     * @param type      对话类型
     * @return          返回信息列表
     */
    List<Message> getMessageDialog(Long userId, Long targetId, Integer type);

    /**
     * 保存系统通知的记录
     * @param message
     */
    void insert(Message message,int state);

    /**
     * 更新系统通知的状态为已读
     * @param authorId
     * @param i
     */
    void updateSystemState(Long authorId, int i);

    /**
     * 获取群邀请的邀请信息
     * @param crowdId 群id
     * @param userId  用户id
     * @return
     */
    List<MessageContent> getInviteCrowdMessage(Long crowdId, Long userId);

    /**
     * 获得群聊中的对话信息,多条
     * @param userId    群id
     * @param targetId  用户id
     * @param type      2
     * @return
     */
    List<Message> getMessageCrowdDialog(Long userId, Long targetId, Integer type);

    /**
     * 获取信息提示列表,接收的信息类型为 2, 群消息,state为1
     * @param id 接收信息的id
     * @return 返回map的list集合,map封装发送人的id,nickName,头像,信息条数
     */
    List<Map<String,Object>> getMessageCrowdDialogClue(Long id);

    /**
     * 获取加好友信息,通过发送接收者
     * @param userId
     * @param targetId
     * @return
     */
    Message getAddFriendMessage(Long userId, Long targetId);
}
